/**
 * @file    main.c 
 * @author  18408107475@163.com
 * @version V1.0.0
 * @date    2025-07-12
 * @brief   利用PWM控制直流电机
 * @details 
 * 硬件配置：
 *   - 主控芯片: STM32F103系列
 *   - 电机驱动: L298N或TB6612FNG
 *   - 控制引脚: 
 *     - PC1: 电机方向控制1
 *     - PC2: 电机方向控制2
 *     - PA1: PWM输出 (TIM2_CH2)
 *   - 显示设备: OLED SSD1315 (I2C接口)
 * 
 * 软件特性：
 *   - 电机速度从0逐步增加到100，然后反转从-100逐步增加到0
 *   - OLED实时显示当前速度值
 *   - 速度更新周期: 50ms
 */

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"          // STM32标准外设库（必需核心头文件）
#include "Delay.h"              // 精确延时函数（基于SysTick实现）
#include "USART1_Config.h"      // USART1初始化及printf重定向
#include "OLED_SSD1315_Config.h"// OLED SSD1315驱动（I2C接口）
#include "Motor.H"

/* 私有变量定义 --------------------------------------------------------------*/
int Speed = 0;                  // 电机速度控制变量

/**
 * @brief  主程序入口
 * @param  None
 * @retval int 程序状态码（实际不会返回）
 * @执行流程：
 *   1. 初始化OLED显示
 *   2. 初始化电机控制
 *   3. 显示初始界面
 *   4. 进入无限循环：
 *      - 速度值递增
 *      - 更新电机速度
 *      - 更新OLED显示
 *      - 当速度达到100时，切换方向并从-100开始
 */
int main(void)
{
    OLED_SSD1315_Init();        // 初始化OLED显示屏
    Motor_Config();             // 初始化电机控制模块

    OLED_SSD1315_Clear();       // 清屏
    OLED_SSD1315_ShowString(0,0, "Speed: ", 16, false); // 显示固定文本

    while (1)                   // 无限循环
    {
        Speed ++;               // 速度递增
        Delay_ms(50);           // 延时50ms，控制速度更新频率
        Motor_SetSpeed(Speed);  // 设置电机速度
        OLED_SSD1315_ShowNum(57, 0, Speed, 3, 16); // 显示当前速度值

        if(Speed == 100) {      // 当速度达到100时
            Speed = -Speed;     // 切换为反转方向（-100）
        }
    }
}

/************************ (C) COPYRIGHT 2025 Embedded Team *****END OF FILE****/
